package model

import (
	"gorm.io/gorm"
	"time"
)

// Goods 商品表
type Goods struct {
	Id          uint64         `gorm:"column:id;type:bigint UNSIGNED;comment:商品id;primaryKey;not null;" json:"id"`                               // 商品id
	Images      string         `gorm:"column:images;type:varchar(255);comment:商品图片;not null;" json:"images"`                                     // 商品图片
	Name        string         `gorm:"column:name;type:varchar(20);comment:商品名称;not null;" json:"name"`                                          // 商品名称
	Number      string         `gorm:"column:number;type:varchar(255);comment:商品编码;default:NULL;" json:"number"`                                 // 商品编码
	Sales       uint64         `gorm:"column:sales;type:bigint UNSIGNED;comment:商品销量;not null;default:0;" json:"sales"`                          // 商品销量
	TypesId     uint64         `gorm:"column:types_id;type:bigint UNSIGNED;comment:分类id;not null;default:0;" json:"types_id"`                    // 分类id
	StockpileId uint64         `gorm:"column:stockpile_id;type:bigint UNSIGNED;comment:库存单位id;not null;default:0;" json:"stockpile_id"`          // 库存单位id
	Status      uint8          `gorm:"column:status;type:tinyint UNSIGNED;comment:商品状态 0:出售中 1:已售完 2:已下架;not null;default:0;" json:"status"`     // 商品状态 0:出售中 1:已售完 2:已下架
	CreatedAt   time.Time      `gorm:"column:created_at;type:datetime(3);comment:创建时间;not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"` // 创建时间
	UpdatedAt   time.Time      `gorm:"column:updated_at;type:datetime(3);comment:更新时间;not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"` // 更新时间
	DeletedAt   gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);comment:删除时间;default:NULL;" json:"deleted_at"`                          // 删除时间
	Price       uint64         `gorm:"column:price;type:bigint UNSIGNED;comment:商品默认价格;not null;default:0;" json:"price"`                        // 商品默认价格
}

func (g *Goods) TableName() string {
	return "goods"
}

// GoodsDetails 商品规格主表
type GoodsDetails struct {
	Id      uint64 `gorm:"column:id;type:bigint UNSIGNED;comment:商品规格id;primaryKey;not null;" json:"id"`          // 商品规格id
	GoodsId uint64 `gorm:"column:goods_id;type:bigint UNSIGNED;comment:商品id;not null;default:0;" json:"goods_id"` // 商品id
}

func (g *GoodsDetails) TableName() string {
	return "goods_details"
}

// GoodsDetailsAttribute 商品规格属性表
type GoodsDetailsAttribute struct {
	Id             uint64 `gorm:"column:id;type:bigint UNSIGNED;comment:商品规格属性id;primaryKey;not null;" json:"id"`                          // 商品规格属性id
	GoodsDetailsId uint64 `gorm:"column:goods_details_id;type:bigint UNSIGNED;comment:商品规格id;not null;default:0;" json:"goods_details_id"` // 商品规格id
	K              string `gorm:"column:k;type:varchar(20);comment:规格;not null;default:0;" json:"k"`                                       // 规格
	V              string `gorm:"column:v;type:varchar(20);comment:规格属性值;not null;" json:"v"`                                              // 规格属性值
	Price          uint64 `gorm:"column:price;type:bigint UNSIGNED;comment:销售价;not null;default:0;" json:"price"`                          // 销售价
	Stockpile      uint64 `gorm:"column:stockpile;type:bigint UNSIGNED;comment:库存数量;not null;default:0;" json:"stockpile"`                 // 库存数量
}

func (g *GoodsDetailsAttribute) TableName() string {
	return "goods_details_attribute"
}

// Types 商品分类表
type Types struct {
	Id        uint64 `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	TypesName string `gorm:"column:types_name;type:varchar(20);comment:分类名称;not null;" json:"types_name"` // 分类名称
}

func (t *Types) TableName() string {
	return "types"
}
